package com.dc.util;

import com.dc.vo.GridTitleVO;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.StringUtils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

/**
 * 反射工具类
 */
public class ReflectUtil {


    /**
     * 反射获取类属性字段，并转换为GridTitleVO对接集合
     * @param cls 类对象
     * @return
     */
    public static List<GridTitleVO> getGridTitleList(Class<?> cls) {
        List<GridTitleVO> titleList = new ArrayList<>();

        Field[] fields = cls.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            // 获取属性的@ApiModelProperty注解对象
            ApiModelProperty apiModelProperty = field.getAnnotation(ApiModelProperty.class);
            if (apiModelProperty == null || apiModelProperty.hidden()) {
                // 没有配置注解、或 隐藏的属性，则跳过
                continue;
            }
            // 获取value值为表头名称
            String title = apiModelProperty.value();
            if (StringUtils.isBlank(title)) {
                // value值为空的，则取属性字段名为表头
                title = field.getName();
            }
            GridTitleVO gridTitleVO = new GridTitleVO();
            gridTitleVO.setFieldId(field.getName());
            gridTitleVO.setFieldName(title);

            titleList.add(gridTitleVO);
        }
        return titleList;
    }


}
